package com.hundsun.cprs.yyt.gateway.service.uc;

import com.hundsun.cprs.yyt.gateway.request.*;
import com.hundsun.cprs.yyt.gateway.response.*;
import com.hundsun.jresplus.remoting.impl.annotation.Service;
import com.hundsun.jresplus.remoting.impl.annotation.ServiceModule;
import com.hundsun.jresplus.remoting.impl.annotation.ServiceParam;

@ServiceModule
public interface UcCommonService {
	
	@Service(functionId = "319300", desc = "会员登录接口")
	LoginResponse login(LoginRequest request);

	@Service(functionId = "319301", desc = "会员注册接口")
    RegisterResponse register(RegisterRequest request);
	
	@Service(functionId = "319302", desc = "发送短信验证")
    BaseResponse sendSmsCode(@ServiceParam("phone") String phone);
	
	@Service(functionId = "319303", desc = "根据会员ID获取会员详情")
	UserResposne getDetailOfUser(@ServiceParam("user_id") Long userId);
	
	@Service(functionId = "319304", desc = "根据会员ID获取会员基本信息")
	UserResposne getBasicOfUser(@ServiceParam("user_id") Long userId);
	
	@Service(functionId = "319305", desc = "修改会员基本信息")
	BaseResponse modifyUser(UserRequest request);

	@Service(functionId = "319306", desc = "登录密码修改")
	BaseResponse modifyLoginPwd(@ServiceParam("user_id") Long userId,
								@ServiceParam("password") String password,
								@ServiceParam("new_password") String newPassword);

	@Service(functionId = "319307", desc = "找回密码-验证手机号码,通过后发送验证码")
	ForgetResponse forgetPwd(@ServiceParam("phone") String phone,@ServiceParam("biz_type") String bizType);

	@Service(functionId = "319308", desc = "找回密码-校验验证码")
	BaseResponse verifyForgetCode(@ServiceParam("user_id") Long userId,@ServiceParam("code") String code,@ServiceParam("biz_type") String bizType);

	@Service(functionId = "319309", desc = "找回密码-重置密码")
	BaseResponse resetLoginPwd(@ServiceParam("user_id") Long userId,@ServiceParam("code") String code,@ServiceParam("new_pwd") String newPwd,@ServiceParam("pwd_type") String pwdType);

	/**
	 * 实名认证 第一步
	 * 校验实名四要素的准确性(基于三方校验)
	 *     1.部分三方资金渠道校验通过则直接开户成功,如模拟银行，支付宝等
	 *     2.部分三方资金渠道校验需进一步校验身份验证(第二步)，如环迅等
	 * @param request
	 * @return
	 */
	@Service(functionId = "319310", desc = "实名认证-四要素校验")
	BaseResponse realNameVerfiy(RealNameVerfiyRequest request);

	/**
	 * 实名认证 第二步
	 * 校验四要素中的手机号码是否正确。
	 * @param request
	 * @return
	 */
	@Service(functionId = "319311", desc = "实名认证-手机验证码校验")
	RealNameResponse realNameVerfiyInSecondStep(RealNameVerfiyRequest request);

	@Service(functionId = "319312", desc = "查询实名认证信息")
	UserRealNameResposne getRealNameInfo(@ServiceParam("user_id") Long userId);

	@Service(functionId = "319313", desc = "修改手机号码")
	BaseResponse modifyMobile(@ServiceParam("user_id") Long userId,@ServiceParam("new_phone")String newPhone,@ServiceParam("check_code")String checkCode);

	@Service(functionId = "319314", desc = "修改支付密码")
	BaseResponse modifyPayPwd(@ServiceParam("user_id") Long userId,@ServiceParam("old_pwd")String oldPwd,@ServiceParam("new_pwd")String newPwd);

	@Service(functionId = "319315", desc = "发送验证码(修改手机号码业务场景)")
	BaseResponse sendSmsCodeByModifyMobile(@ServiceParam("user_id") Long userId,@ServiceParam("new_phone")String newPhone);

	/**
	 * 根据会员推广码获取会员详情
	 * @param fr
	 * @return
	 */
	@Service(functionId = "319316", desc = "根据会员推广码获取会员详情")
	UserResposne getDetailOfUserByPromotionCode(@ServiceParam("fr") String fr);

	/**
	 * 根据会员ID，修改会员的头像信息
	 * @param userId        会员ID
	 * @param headImgBase64 头像的base64编码
	 * @return
	 */
	@Service(functionId = "319317", desc = "修改会员头像信息")
	HeadImgUpdateResponse modifyUserHeadImg(@ServiceParam("user_id") Long userId,@ServiceParam("headimg_base64") String headImgBase64);

	/**
	 * 绑定或重新绑定银行卡或支付宝信息等
	 * @param request
	 * @return
	 * @since 1.1.3.2
	 */
	@Service(functionId = "319318", desc = "实名认证-重绑银行卡")
	BaseResponse bindBankCard(RealNameVerfiyRequest request);


	//三方账号登陆接口
	@Service(functionId = "319319", desc = "三方账号绑定校验并登录")
	ThirdLoginResponse validateBindStatusAndLogin(ThirdAccountRequest request);

	/*@Service(functionId = "319320", desc = "绑定三方账号并登录")
	ThirdLoginResponse bindThirdAccountAndLogin(BindThirdAccountRequest request);*/

	@Service(functionId = "319320", desc = "校验账号是否存在")
	ThirdLoginResponse validateAccountIsExist(BindThirdAccountRequest request);

	@Service(functionId = "319321", desc = "注册会员并绑定三方账号登录")
	ThirdLoginResponse regAndBindThirdAccountLogin(RegAndBindThirdAccountRequest request);

	/**
	 * 绑卡
	 * @param request
	 * @return
	 * TODO：需要更改功能号
	 */
	@Service(functionId = "319322", desc = "绑卡第一步")
	BaseResponse bindBank(RealNameVerfiyRequest request);



	@Service(functionId = "319323", desc = "解绑")
	BaseResponse unBindBank(BankFundCloseRequest request);

	@Service(functionId = "319324", desc = "根据会员ID获取用户登录加密信息")
	LoginInfoResponse getEncryptLoginInfo(@ServiceParam("user_id") Long userId);

	@Service(functionId = "319325", desc = "上传图片")
	ImgUploadResponse imgUpload(@ServiceParam("img_base64") String imgBase64);

	//联交运上海银行所需接口开始

	@Service(functionId = "319326", desc = "根据银行的类型，获取该类型下的所有银行")
	LJYSHResponse getBanks(LJYSHRequest request);

	@Service(functionId = "319327", desc = "获取所有省")
	LJYSHResponse getProveniences();

	@Service(functionId = "319328", desc = "获取省内所有市")
	LJYSHResponse getCities(LJYSHRequest request);

	@Service(functionId = "319329", desc = "获取市内的区")
	LJYSHResponse getAreas(LJYSHRequest request);

	@Service(functionId = "319330", desc = "根据银行、省市区、关键字获取所有联行信息")
	LJYSHResponse getBankBranchs(LJYSHRequest request);

	@Service(functionId = "319347", desc = "根据联行号获取联行信息")
	LJYSHResponse getBankBranch(LJYSHRequest request);

	//联交运上海银行所需接口结束

	//资金相关接口
	@Service(functionId = "319331", desc = "查询会员的资金情况")
	FundMoneyResponse getFundMoneyByUserId(@ServiceParam("user_id") Long userId);
	
	@Service(functionId = "319332", desc = "会员充值/提款")
	BankFundOutInResponse fundOutIn(BankFundOutInRequest request);

	/**
	 * 查询银行渠道信息
	 * 	单渠道下只返回一级渠道
	 * 	type 1-入金 2-出金
	 * @param action
	 * @return
	 */
	@Service(functionId = "319333", desc = "查询银行渠道列表信息")
    BankListResponse getBankInfoList(@ServiceParam("action") String action);

	@Service(functionId = "319334", desc = "入金发送短信验证码(三方支付)")
	BankVerifyMsgResponse sendVerifyMsgForFundIn(FundInSmsRequest request);

	@Service(functionId = "319335", desc = "查询资金支持的银行列表")
	BankClientInfoResponse getBankClientInfoList(BankClientInfoRequest request);

	@Service(functionId = "319336", desc = "查询出入金手续费相关配置")
	BankFundOutInConfigResponse getFundOutInConfigInfo(@ServiceParam("bank_pro_code") String bankProCode);
	
	@Service(functionId = "319337", desc = "开户发送校验码(三方支付)")
	BaseResponse sendVerifyMsgForOpen(RealNameVerfiyRequest request);
	
	@Service(functionId = "319338", desc = "查询会员资金明细信息")
	BankFundAccountLogResponse getFundAccountLogList(BankFundAccountLogRequest request);
	
	@Service(functionId = "319339", desc = "根据银行渠道代码获取子渠道列表信息")
    BankChannelListResponse getBankChannelListByBankProCode(@ServiceParam("bank_pro_code") String bankProCode);

	@Service(functionId = "319340", desc = "查询当前渠道是否需要签约-仅多渠道适用")
    BankFundSignStatusResponse getBankFundSignStatus(BankFundSignStatusRequest request);

	@Service(functionId = "319341", desc = "查询当前的渠道模式")
	BankMultichannelStatusResponse getBankMultichannelStatus();

	@Service(functionId = "319342", desc = "查询渠道备注信息")
	BankFundOutInMemoResponse bankMemo(BankFundOutInMemoRequest request);

	@Service(functionId = "319343", desc = "查询资金出入金申请记录")
	BankFundOutInApplyResponse bankApply(BankFundOutInApplyRequest request);

	@Service(functionId = "319344", desc = "查询资金参数配置")
	BankParamInfoResponse getBankParamInfoList(BankParamInfoRequest request);

	@Service(functionId = "319345", desc = "获取银行列表信息")
	FundPaymentConfigResponse getFundPaymentConfigList(FundPaymentConfigRequest request);

	@Service(functionId = "319346", desc = "会员退出")
	BaseResponse logout(LogoutRequest request);

	@Service(functionId = "319348", desc = "查询会员的推荐总数和详情")
	BrokerReferRelateResponse queryBrokerRelateList(BrokerReferRelateRequest request);

	@Service(functionId = "319349", desc = "token登录")
	LoginResponse tokenLogin(TokenLoginRequest request);

	@Service(functionId = "319366",desc = "获取所有可用卡号")
	BankAccountResponse getCanUserSignAccount(BankAccountRequest request);

	@Service(functionId = "319367",desc = "删除卡号")
	BaseResponse cancelSignAccount(BankAccountRequest request);
}
